package com.lhc.project2;

import java.util.Arrays;

public class CustomerList {
	//用来保存客户对象的数组
	Customer[] cs;
	//记录已保存客户对象的数量
	int total = 0;
	
	//用来初始化cs数组 
	//参数： totalCustomer:指定customers数组的最大空间
	public CustomerList(int totalCustomer) {
		cs = new Customer[totalCustomer];
	}
	
	/* 用途：将参数customer添加组中最后一个客户记录对象之后
	 * 参数：customer指定要添加的客户对象
	 * 返回：添加成功返回true;false表示数组已满，无法添加
	 */
	public boolean addCustomer(Customer customer) {
		//添加失败的情况
		//1.customer客户对象是null
		if(customer == null) {
			return false;
		}
		//2.数组已满，添加失败
		if(cs.length <= total) {
			return false;
		}
		//[客户1，客户2，客户3，null,null]	total = 3
		cs[total++] = customer;
		return true;
		}
	/*用途：用参数customer替换数组中由index指定的对象
	 * 参数：customer指定替换的新客户对象
	 * index指定所替换对象在数组中的位置
	 * 返回：替换成功返回true;false表示索引替换无效，无法替换
	 */
	public boolean replaceCustomer(int index,Customer cust) {
		//返回false的情况
		//判断索引是否为非法索引
		if(index < 0 || index >= total) {
			return false;
		}
		//customer客户对象是null
		if(cust == null) {
			return false;
		}
		
		cs[index] = cust;
		return true;
	}
	
	public boolean deleteCustomer(int index) {
		//判断索引是否为非法索引
		if(index < 0 || index >= total) {
			return false;
		}

		/*
		 * [客户1，客户2，客户3，客户4，null]		total = 4	index = 1 删除客户2
		 * 
		 * cs[1] = cs[2];
		 * [客户1，客户2，客户3，客户4，null]		[客户1，客户3，客户3，客户4，null]	
		 * 
		 * cs[2] = cs[3];
		 * [客户1，客户3，客户3，客户4，null]		[客户1，客户3，客户4，客户4，null]	
		 * 
		 * cs[3] = null; 这一步应该放在循环外面操作。有可能数组已经满了
		 */
		for (int i = index; i < total - 1; i++) {
			cs[i] = cs[i+1];
		}
		//[客户1，客户3，客户3，客户4，null]		[客户1，客户3，客户4，null，null]	
		cs[total - 1] = null;
		
		//成功删除了一个客户
		total--;
		return true;
	}
	
	/*
	 *用途：返回数组中记录的所有客户对象
	 * 返回：Customer[] 数组中包含了当前所有客户对象，该数组长度与对象个数相同
	 */
	public Customer[] getAllCustomers() {	// [客户1，客户2，客户3，客户4，null]	
		return Arrays.copyOf(cs, total);
				
	}
	/*
	 * 用途：返回参数index指定索引位置的客户对象记录
	 * 参数：index指定索要获取的客户对象在数组中的索引位置
	 * 返回：封装了客户信息的Customer对象
	 */
	public Customer getCustomer(int index) {
		//判断索引是否为非法索引
		if(index < 0 || index >= total) {
			return null;
		}
		return cs[index];
	}
}





